相信從前幾天的範例中,大家應該知道怎麼宣告變數了,在 JavaScript 中,他的宣告是很特別的,它宣告的範圍是屬於函式範圍(function scoped). 這個是跟其他程式語言有著非常大的不同,直接來看個例子吧。
var foo = 9527;
if (true) {
var foo = 5487;
}
console.log(foo); // 這裡的結果會是 5487
所以如果這樣寫,肯定會出包:
var index = 0;
var array = [1, 2, 3];
for(var index = 0; index < array.length; index++>) {
console.log(array[index]);
}
又比如說下面這段程式碼
一般我們可能會覺的他的結果應該是 0 1 2 3 4 5 6 7 8 9
, 但由於 setTimeout
會在 for 迴圈執行後才執行, 所以他的結果就會變成 10 10 10 10 10 10 10 10 10 10
for(var i = 0; i < 10; i++) {
setTimeout(function(){ console.log(i), 100*i});
}
所以,這也是為什麼在 TypeScript (還有 ES6) 出現了一個新的宣告方式 let
了。
let foo = 9527;
if (true) {
let foo = 5487;
}
console.log(foo); // 這裡的結果會是 9527 (謝謝你讓我感到很安全XD)
下面的結果也會回歸正常 0 1 2 3 4 5 6 7 8 9
for(let i = 0; i < 10; i++) {
setTimeout(function(){ console.log(i), 100*i});
}
此外,由於 TypeScript 是 JavaScript 的超集,所以如果在 TypeScript 裡面寫 JavaScript 完全是合法的。所以這一點可能就真的要留意一下!
只要 let 不要 var, 他可以幫助我們避開很多容易忽略調的小細節和錯誤!
const 和 let 最大的差別就是 const 宣告的變數都是常數,也就是一旦宣告就不能再改變的。如果重複宣告,就會在編譯的時候報錯。